<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<p>动态类型Edit节
  JavaScript 是一种弱类型或者说动态语言。
  这意味着你不用提前声明变量的类型，在程序运行过程中，类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据
</p>
<pre style="font-size: 16px">
  Boolean
  Null
  Undefined（一个没有被赋值的变量会有个默认值 undefined）
  Number
  BigInt
  String(这意味着字符串一旦被创建，就不能被修改。但是，可以基于对原始字符串的操作来创建新的字符串。)
  Symbol(符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值)
  Object(对象是指内存中的可以被 标识符引用的一块区域.)(键值可以是一个字符串或者符号值（Symbol）。)
</pre>
<p>除 Object 以外的所有类型都是不可变的（值本身无法被改变）->引用的地址发生变化->对象的地址不改变</p>
<p>对象两种属性：1数据属性->a.name
<pre>
  let obj = {
    a: 1
  }
</pre>
2.访问器属性->
<pre>
  let obj = {
    set: a(val){
      this._a=val
    }
    get: a(){
      return this._a
    }
  }
</pre>
</p>
<p>一个 Javascript 对象就是键和值之间的映射.。键是一个字符串（或者 Symbol） ，值可以是任意类型的值(包括函数）</p>
<p>数组是一种使用整数作为键(integer-key-ed)属性和长度(length)属性之间关联的常规对象。</p>
<p>使用 typeof 操作符判断对象类型Edit</p>
<script>
  console.group('start')
  console.group('start')
  let num = 10
  let num1 = num
  console.log(num)
  //num 使用了新的地址，num1 还是老的地址->对象除外
  num = 100
  console.log(num)
  console.log(num1)
  let num3;
  console.log(num3)

  const num4 = 2n ** 53n;
  console.log(num4)

  let obj1 = {
    a: 1
  }
  console.log(obj1.hasOwnProperty('a'))
  console.log(obj1.constructor)
  console.log(obj1.a)
  obj1.a = 100
  console.log(obj1.a)

  let obj2 = {}
  Object.defineProperty(obj2, 'name', {
    writable: false,
    value: 'hg'
  });
  console.log(obj2.name)
  obj2.name = 'gg'
  console.log(obj2.name)
  console.groupEnd()
  console.group('start')

  console.groupEnd()
  console.groupEnd()
</script>
</body>
</html>
